360 c++开发面经（已offer）



360 一面 

1. IO模型 
2. 面向对象的理解？c++的特性 
封装、继承、多态 
3. c++类的成员变量和成员函数内存分布情况 
成员函数不占用对象内存，所有函数是放在代码区的。对象大小和对象中数据成员大小是一致的。
4. class 和struct的区别，结构体可以定义其他函数吗？ 
class默认访问权限为private 
struct是public。struct可以包含成员函数，能继承，能实现多态。 
5. nullptr和NULL区别 
NULL在c++中为0（在C中是void*类型）c++中不允许隐式转换成其他类型。 
nullptr在任何情况下都代表空指针。 
6. 互斥锁和自旋锁的区别 
7. new和malloc区别，free和delete区别 
8. 设计模式 
9. linux显示一个文件大小的指令 ls –lh 
10. SGD与adam 区别  项目训练怎么调参 
计算目标函数关于当前参数的梯度 
根据历史梯度计算动量 
计算当前时刻下的下降梯度 
根据下降梯度进行更新 
adam是自适用矩阵估计，会计算二阶动量 
SGD下降速度慢 
11.  怎么把一个程序放在后台 
在命令后面加上 ./test & 
在前台执行的命令，放到后台执行：ctrl+z  bg % 1 
在退出shell时继续运行：nohup ./test & 
查看当前终端所有任务PID，状态 jobs –l 
查看当前所有进程：ps –aux 
杀死一个进程：前台ctrl+c，后台：kill PID 
将后台中的命令调至前台继续运行：fg %xxnumber 
12. TCP怎么实现可靠传输？ 
13.  拥塞控制 
14. TCP Time_wait状态过多怎么办？ 
打开系统time_wait的重用和快速回收 
重用:tcp_tw_reuse=1,默认为0，表示关闭. 
socket中设置选项，跳过四次挥手（不建议） 
修改net.ipv4.tcp_max_tw_buckets,调整time_wait状态上限个数.当连接数超过该参数，新关闭连接直接关闭； 
15.  close_wait状态过多怎么办？ 
出现原因：被动关闭方未关闭socket造成 
16.  构造函数为什么不能为虚函数 
17. vector实现机制 
维护一块连续的线性空间，空间不足时，重新配置空间，移动数据，释放原空间，会造成迭代器失效 
18. unordered_map与map的区别 
19. shared_ptr 
共享智能指针，多个智能指针可以指向相同的对象，使用控制块管理引用计数，当计数器等于0时，资源会被释放。可以传入unique_ptr,weak_ptr来构造，也可用new构造 
20.  网络编程了解吗 
21. int *p[10] 和int (*p)[10]  int*p[10]强调数组，表示含有int* 指针的一个数组p 
22.  编程题：反转链表 



360二面： 
1. 项目详细 
2. const *p如果程序运行时向里面写值会出问题吗？什么问题？ 
3. 多个CPU怎么允许 
4. 快排时间复制度 一个树的遍历的时间复制度 
5. socket write成功返回之后，其数据在哪里 
write函数调用瞬间，将数据移到输出缓冲； read函数调用瞬间，从输入缓冲读取数据。 write函数在数据移到输出缓冲时返回。 



360 HR面 
1. 自我介绍 
2. 优点 
3. 缺点 
4. 为什么投北京的岗位 
5. 你的学习路线 
6. 反问
